#include <stdio.h>
#include <string.h>
/**
 * 伪代码
 * Input：最小子串长度L，字符串str
 * Output：输出长度大于等于L、出现次数最多、长度最长、出现最早的子串sub
 *
 * 读入L；
 * 读入字符串str；
 * max_sub_str = new string(); // 存储答案子串
 * max_count = 0; // 存储当前最大出现次数
 * // 枚举所有可能的子串长度
 * FOR len := L to strlen(str)  DO
 *    // 可能的子串长度len的取值范围是从L到整个str的长度
 *    // 枚举长度为len的所有可能子串 str[i] -> str[i+len]
 *    FOR i := 0 to strlen(str) - len DO
 *      // 获取str[i]到str[i+len]之间的子串sub_str
 *      sub_str := GetSubString(str, i, len);
 *      // 统计sub_str在整个字符串中出现的次数
 *      count := 0;
 *      FOR j := 0 to strlen(str) - len DO
 *        IF 子串str[j]->str[j + len]与sub_str是相等的 THEN
 *          count += 1;
 *      END
 *      IF count > max_count THEN
 *        // 当前子串的出现次数比现有子串高
 *        max_sub_str := sub_str;
 *        max_count := count;
 *      ELSE IF count == max_count AND strlen(sub_str) > strlen(max_sub_str)
 * THEN
 *        // 出现次数相同但长度更长
 *        max_sub_str := sub_str;
 *      END
 *   END
 * END
 * print(max_sub_str); // 输出找到的答案子串
 *
 */

int main(void) {
  // 输入L
  int L = 0;
  scanf("%d\n", &L); // 一定要把数字后换行符也读入
  // 读入字符串str
  char str[61] = {0};
  fgets(str, 61, stdin);
  // 如果fgets读取到的字符串最后有换行符，将换行符去掉
  if (str[strlen(str) - 1] == '\n')
    str[strlen(str) - 1] = '\0';
  // printf("str = %s\n", str);
  //  准备变量
  char max_sub_str[61] = {0};
  int max_count = 0;
  int len = 0;
  //* 枚举所有可能的子串长度
  //* FOR len := L to strlen(str)  DO
  for (len = L; len <= strlen(str); len++) {
    // * 可能的子串长度len的取值范围是从L到整个str的长度
    // * 枚举长度为len的所有可能子串 str[i] -> str[i+len]
    // FOR i := 0 to strlen(str) - len DO
    int i = 0;
    for (i = 0; i < strlen(str) - len; i++) {
      // 获取str[i]到str[i+len]之间的子串sub_str
      // sub_str := GetSubString(str, i, len);
      char sub_str[61] = {0};
      int j = 0;
      for (j = 0; j < len; j++)
        sub_str[j] = str[i + j];
      // 统计sub_str在整个字符串中出现的次数
      int count = 0;
      // FOR j := 0 to strlen(str) - len DO
      for (j = 0; j < strlen(str) - len; j++) {
        // IF 子串str[j]->str[j + len]与sub_str是相等的 THEN
        //   count += 1;
        // END
        int k = j;
        for (k = j; k < j + len; k++) {
          if (str[k] != sub_str[k - j])
            break;
        }
        if (k == j + len) {
          // 上面一个循环正常执行到最后，说明子串str[j]->str[j+len]与sub_str是相等的
          count++;
        }
      }

      if (count > max_count) {
        // 当前子串的出现次数比现有子串高
        strcpy(max_sub_str, sub_str);
        max_count = count;
      } else if (count == max_count && strlen(sub_str) > strlen(max_sub_str)) {
        // 出现次数相同但长度更长
        strcpy(max_sub_str, sub_str);
      }
    }
  }
  // print(max_sub_str); // 输出找到的答案子串
  printf("%s", max_sub_str);
  return 0;
}
